/**
 * 本地存储工具类
 * 用于管理业务数据的本地持久化存储
 */

import cache from './cache.js';

// 存储key常量
const KEYS = {
	HISTORY: 'stock_history', // 历史查询记录
	SELECTED_STOCK: 'selected_stock', // 当前选中的股票
	TPO_SETTINGS: 'tpo_settings', // TPO（四度空间）设置
	QUERY_SETTINGS: 'query_settings' // 查询设置（复权方式、数据长度、周期）
};

/**
 * 保存历史查询记录
 * @param {Object} stockData - 股票数据
 * @param {String} stockData.stockCode - 股票代码
 * @param {String} stockData.stockName - 股票名称
 * @param {String} stockData.stockNumber - 股票编号
 * @param {Object} queryParams - 查询参数
 */
function saveHistory(stockData, queryParams) {
	try {
		let historyList = getHistory();
		
		// 检查是否已存在该股票的记录
		const existIndex = historyList.findIndex(
			item => item.stockCode === stockData.stockCode
		);
		
		const historyItem = {
			...stockData,
			queryParams,
			queryTime: Date.now()
		};
		
		if (existIndex !== -1) {
			// 更新现有记录
			historyList[existIndex] = historyItem;
		} else {
			// 添加新记录到开头
			historyList.unshift(historyItem);
		}
		
		// 最多保存50条记录
		if (historyList.length > 50) {
			historyList = historyList.slice(0, 50);
		}
		
		cache.set(KEYS.HISTORY, historyList);
	} catch (e) {
		console.error('保存历史记录失败:', e);
	}
}

/**
 * 获取历史查询记录
 * @returns {Array} 历史记录数组
 */
function getHistory() {
	try {
		const historyList = cache.get(KEYS.HISTORY);
		return historyList || [];
	} catch (e) {
		console.error('获取历史记录失败:', e);
		return [];
	}
}

/**
 * 删除指定历史记录
 * @param {String} stockCode - 股票代码
 */
function removeHistory(stockCode) {
	try {
		let historyList = getHistory();
		historyList = historyList.filter(item => item.stockCode !== stockCode);
		cache.set(KEYS.HISTORY, historyList);
	} catch (e) {
		console.error('删除历史记录失败:', e);
	}
}

/**
 * 清空所有历史记录
 */
function clearHistory() {
	try {
		cache.remove(KEYS.HISTORY);
	} catch (e) {
		console.error('清空历史记录失败:', e);
	}
}

/**
 * 保存当前选中的股票
 * @param {Object} stock - 股票信息
 */
function saveSelectedStock(stock) {
	try {
		cache.set(KEYS.SELECTED_STOCK, stock);
	} catch (e) {
		console.error('保存选中股票失败:', e);
	}
}

/**
 * 获取当前选中的股票
 * @returns {Object|null} 股票信息
 */
function getSelectedStock() {
	try {
		return cache.get(KEYS.SELECTED_STOCK);
	} catch (e) {
		console.error('获取选中股票失败:', e);
		return null;
	}
}

/**
 * 保存TPO（四度空间）设置
 * @param {Object} settings - TPO设置
 * @param {Number} settings.tpoTickSize - 分度值
 * @param {Number} settings.tpoFillIndex - 填充值索引
 */
function saveTPOSettings(settings) {
	try {
		cache.set(KEYS.TPO_SETTINGS, settings);
	} catch (e) {
		console.error('保存TPO设置失败:', e);
	}
}

/**
 * 获取TPO（四度空间）设置
 * @returns {Object|null} TPO设置对象，包含tpoTickSize和tpoFillIndex
 */
function getTPOSettings() {
	try {
		return cache.get(KEYS.TPO_SETTINGS);
	} catch (e) {
		console.error('获取TPO设置失败:', e);
		return null;
	}
}

/**
 * 保存查询设置
 * @param {Object} settings - 查询设置
 * @param {Number} settings.adjustIndex - 复权方式索引
 * @param {Number} settings.dataLength - 数据长度
 * @param {String} settings.period - 周期值
 */
function saveQuerySettings(settings) {
	try {
		cache.set(KEYS.QUERY_SETTINGS, settings);
	} catch (e) {
		console.error('保存查询设置失败:', e);
	}
}

/**
 * 获取查询设置
 * @returns {Object|null} 查询设置对象，包含adjustIndex、dataLength和period
 */
function getQuerySettings() {
	try {
		return cache.get(KEYS.QUERY_SETTINGS);
	} catch (e) {
		console.error('获取查询设置失败:', e);
		return null;
	}
}

export default {
	saveHistory,
	getHistory,
	removeHistory,
	clearHistory,
	saveSelectedStock,
	getSelectedStock,
	saveTPOSettings,
	getTPOSettings,
	saveQuerySettings,
	getQuerySettings
};

